// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package io.flutter.embedding.android;

import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.flutter.embedding.engine.FlutterEngine;

/**
 * Provides a {@link FlutterEngine} instance to be used by a {@code FlutterActivity} or {@code
 * FlutterFragment}.
 *
 * <p>{@link FlutterEngine} instances require significant time to warm up. Therefore, a developer
 * might choose to hold onto an existing {@link FlutterEngine} and connect it to various {@link
 * FlutterActivity}s and/or {@code FlutterFragment}s. This interface facilitates providing a cached,
 * pre-warmed {@link FlutterEngine}.
 */
public interface FlutterEngineProvider {
  /**
   * Returns the {@link FlutterEngine} that should be used by a child {@code FlutterFragment}.
   *
   * <p>This method may return a new {@link FlutterEngine}, an existing, cached {@link
   * FlutterEngine}, or null to express that the {@code FlutterEngineProvider} would like the {@code
   * FlutterFragment} to provide its own {@code FlutterEngine} instance.
   */
  @Nullable
  FlutterEngine provideFlutterEngine(@NonNull Context context);
}
